﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Ahp;

namespace AhpTest
{
    [TestClass]
    public class CriterionNodeCollectionTest
    {
        [TestMethod]
        public void AddCriterionNodeTest()
        {
            CriterionNodeCollection criterionNodes = new CriterionNodeCollection();
            CriterionNode criterionNode = new CriterionNode("Subcriterion");

            int index = criterionNodes.Add(criterionNode);

            Assert.AreEqual(0, index);
            Assert.AreEqual(criterionNode, criterionNodes[index]);

            //no repeated elements
            index = criterionNodes.Add(criterionNode);
            Assert.AreEqual(0, index);
            Assert.AreEqual(1, criterionNodes.Count);
        }

        [TestMethod]
        public void CreateAndAddCriterionNodeTest()
        {
            CriterionNodeCollection criterionNodes = new CriterionNodeCollection();
            CriterionNode criterionNode1 = criterionNodes.Add("Criterion1", 0.5M);
            CriterionNode criterionNode2 = criterionNodes.Add("Criterion2");

            Assert.AreEqual(criterionNode1, criterionNodes[0]);
            Assert.AreEqual("Criterion1", criterionNode1.Name);
            Assert.AreEqual(0.5M, criterionNode1.LocalPriority);

            Assert.AreEqual(criterionNode2, criterionNodes[1]);
            Assert.AreEqual("Criterion2", criterionNode2.Name);
            Assert.AreEqual(0M, criterionNode2.LocalPriority);
        }

        [TestMethod]
        public void RemoveCriterionNodeTest()
        {
            CriterionNodeCollection criterionNodes = new CriterionNodeCollection();
            CriterionNode criterionNode = new CriterionNode();

            criterionNodes.Add(criterionNode);
            Assert.IsTrue(criterionNodes.Contains(criterionNode));

            criterionNodes.Remove(criterionNode);
            Assert.IsFalse(criterionNodes.Contains(criterionNode));
        }

        [TestMethod]
        public void ClearCriterionNodesTest()
        {
            CriterionNodeCollection criterionNodes = new CriterionNodeCollection();
            CriterionNode subcriterionNode1 = new CriterionNode();
            CriterionNode subcriterionNode2 = new CriterionNode();

            criterionNodes.Add(subcriterionNode1);
            criterionNodes.Add(subcriterionNode2);
            Assert.AreEqual(2, criterionNodes.Count);

            criterionNodes.Clear();
            Assert.AreEqual(0, criterionNodes.Count);
        }
    }
}
